#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <algorithm>
using namespace std;
#define N 100010
char s[N];
int a[N][26], u[27], e[N], w[N];
vector <int> v[N];
void srt(vector <int> &a)
{
	int i;
	for(i=0; i<26; u[i]=0, i++);
	for(i=0; i<a.size(); ++u[s[a[i]]+1], e[i]=a[i], i++);
	for(i=0; i<26; u[i+1]+=u[i], i++);
	for(i=0; i<a.size(); a[u[s[e[i]]]++]=e[i], i++);
}
int main()
{
	int i, j, k, n, f;
	char t;
	for(scanf("%s", s), n=0; s[n]; s[n]-='a', n++);
	for(i=0; i<n; a[i][s[i]]=i+1, i++);
	for(i=1; i<n; v[0].push_back(i), i++);
	for(i=0; i<n; v[i].clear(), v[i].~vector(), i++)
		for(srt(v[i]), j=0; j<v[i].size(); w[f]=1, a[i][t]=f, j+=k)
		{
			t=s[v[i][j]];
			if(a[i][t]) f=a[i][t];
			else
				for(f=n, k=0; j+k<v[i].size() && s[v[i][j+k]]==t; k++)
					if(v[i][j+k]+1<f) f=v[i][j+k]+1;
			for(k=0; j+k<v[i].size() && s[v[i][j+k]]==t; k++)
				if(v[i][j+k]+1<n && !w[f]) v[f].push_back(v[i][j+k]+1);
		}
	for(k=0, i=0; i<n; i++)
		for(j=0; j<26; k+=a[i][j]>0, j++);
	for(printf("%d %d\n", n+1, k), i=0; i<n; i++)
		for(j=0; j<26; j++)
			if(a[i][j]) printf("%d %d %c\n", i+1, a[i][j]+1, 'a'+j);
	return 0;
}